package cn.gxa.edu_adm.servlet;

import cn.gxa.edu_adm.bean.Student;
import cn.gxa.edu_adm.commn.model.ResultData;
import cn.gxa.edu_adm.service.impl.StudentServiceImpl;
import cn.gxa.edu_adm.utils.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.util.CellRangeAddress;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;

@WebServlet(urlPatterns = "/downLoadStudentData")
public class DownLoadStudentDataServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
        Integer  stuId= StringUtils.formatInteger(req.getParameter("stuId"));
        String  stuName=StringUtils.formatString(req.getParameter("stuName"));
        String  stuPhone=StringUtils.formatString(req.getParameter("stuPhone"));
        String  stuIdCard=StringUtils.formatString(req.getParameter("stuIdCard"));
        Integer  claId=StringUtils.formatInteger(req.getParameter("claId"));
        Integer  stuState=StringUtils.formatInteger(req.getParameter("stuState"));
        //调用service获取结果集
        ResultData resultData=new StudentServiceImpl().findByManyWhere(null,null,stuId,stuName,stuPhone,stuIdCard,claId,stuState);
            //响应文件
        if(resultData.getCode()==0){
           //list 转换为  Excel  然后 响应给前端
            //查询所有学生
            List<Student> list=(List<Student>)resultData.getData();
            //生成Excel
            //创建HSSFWorkbook对象(excel的文档对象)
            HSSFWorkbook wkb = new HSSFWorkbook();
            //建立新的sheet对象（excel的表单）
            HSSFSheet sheet=wkb.createSheet("学生信息");
          /*  //在sheet里创建第一行，参数为行索引(excel的行)，可以是0～65535之间的任何一个
            HSSFRow row1=sheet.createRow(0);
            //创建单元格（excel的单元格，参数为列索引，可以是0～255之间的任何一个
            HSSFCell cell=row1.createCell(0);
            //设置单元格内容
            cell.setCellValue("学生信息表");

            //合并单元格CellRangeAddress构造参数依次表示起始行，截至行，起始列， 截至列    合并6列[0-5]
            sheet.addMergedRegion(new CellRangeAddress(0,0,0,5));*/
            //在sheet里创建第二行
            HSSFRow row2=sheet.createRow(0);

            //创建一个新字体并对其进行更改。
            Font font= wkb.createFont();
            font.setFontHeightInPoints((short)12);
            font.setFontName("宋体");//simhei
            font.setBold(true);
            /*        font.setItalic(true);*/
            /*        font.setStrikeout(true);*/
            //字体设置为一种样式，因此请创建一种新样式来使用。
            HSSFCellStyle hssfCellStyle=wkb.createCellStyle();
            hssfCellStyle.setFont(font);
            //给头部添加样式
           // cell.setCellStyle(hssfCellStyle);

            //创建单元格并设置单元格内容
            row2.createCell(0).setCellValue("学生编号");
            row2.createCell(1).setCellValue("学生名字");
            row2.createCell(2).setCellValue("出生日期");
            row2.createCell(3).setCellValue("手机号");
            row2.createCell(4).setCellValue("身份证号码");

            /////////////////////////单独设置某一列/////////////////////////////
            HSSFCell  hssfCell=  row2.createCell(5);
            hssfCell.setCellValue("性别");
            //  hssfCell.setCellStyle(hssfCellStyle);
            //循环设置所有列数的样式
            Iterator<Cell> it= row2.iterator();
            while(it.hasNext()){
                it.next().setCellStyle(hssfCellStyle);
            }

            //////////////////////////////////////////////////////

     /*   CellStyle样式= wb.createCellStyle（）;
        style.setFont（font）;*/

            int index=1;
            for (Student stu:list) {
                //在sheet里创建第三行
                HSSFRow row3=sheet.createRow(index);
                row3.createCell(0).setCellValue(stu.getStuId());
                row3.createCell(1).setCellValue(stu.getStuName());
                row3.createCell(2).setCellValue(StringUtils.formatString(stu.getStuBirthday()));//日期格式化
                row3.createCell(3).setCellValue(stu.getStuPhone());
                row3.createCell(4).setCellValue(stu.getStuIdCard());
                row3.createCell(5).setCellValue(stu.getStuSex()==0?"男":"女");//
                index++;
            }
            //适合的列宽
            sheet.autoSizeColumn(1);

//输出Excel文件
            OutputStream output=response.getOutputStream();
            response.reset();
            response.setHeader("Content-disposition", "attachment; filename="+"student"+System.currentTimeMillis()+".xls");
            response.setContentType("application/msexcel");
            wkb.write(output);
            output.close();
        }else{//没有数据

        }

    }
}

//easyExcel
